package com.springapp.utils;

import java.io.*;
import java.util.List;

/**
* 对文件夹进行操作与管理
*
* @author Administrator
*
*/
public class FileTools {

  public static void main(String[] args) throws Exception{
	  //judgeIsFolderExist("C:/root/emc");
	  //judgeIsFileExist("C:/root/emc/a.txt");
	  //getFileName("");
	  //createPath("C:\\root");
	  //new FileTools().StringBufferDemo();
	  new FileTools().readTxtFile("D:\\test.txt");

  }


  public static void createPath(String path){
	  File f = new File(path);
	  if (f.isDirectory()) {
		  System.out.println("目录");
	  }else{
		  System.out.println("文件");
	  }


  }

  /**
   * 创建指定文件
   *
   * @param filePath
   *            Exception 系统找不到指定的路径 ,请确保创建文件的路径存在
   */
  public static void judgeIsFileExist(String filePath) throws Exception {
	  judgeIsFileExist(filePath, true);
  }

  /**
   * 判断文件是否存在
   *
   * @param filePath
   *            文件路径例如 C:\\Users\\QPING\\Desktop\\JavaScript\\2.htm
   * @param isCreate
   *            是否创建文件 true将会创建文件
   * @return Exception 系统找不到指定的路径 ,请确保创建文件的路径存在
   */
  public static boolean judgeIsFileExist(String filePath, boolean isCreate) throws Exception{
	  boolean bl = true;
	  File file = new File(filePath);
	  if (!file.exists()) { // 如果文件不存在则新建
		  bl = false;
		  if (isCreate) {
				  file.createNewFile();
		  }

	  }
	  return bl;
  }

  public static void judgeIsFolderExist(String filePath) {
	  judgeIsFolderExist(filePath, true);
  }

  /**
   * 判断文件夹是否存在
   *
   * @param folderPath
   *            C:\\Users\\QPING\\Desktop\\JavaScript
   * @param isCreate
   *            是否创建文件 true将会创建文件
   * @return
   */
  public static boolean judgeIsFolderExist(String folderPath, boolean isCreate) {
	  boolean bl = true;
	  try {
		  File file = new File(folderPath);
		  // 如果文件夹不存在则创建
		  if (!file.exists() && !file.isDirectory()) {
			  bl = false;
			  if (isCreate)
				  file.mkdirs();
		  } else {

		  }
	  } catch (Exception e) {
		  e.printStackTrace();
	  }

	  return bl;
  }

  public static List<String> getFileName(String path) {
	  List<String> list = null;
	  File file = new File(path);
	  File[] tempList = file.listFiles();
	  for (int i = 0; i < tempList.length; i++) {
		  if (tempList[i].isFile()) {
			  System.out.println("文     件：" + tempList[i]);

		  }
		  /*if (tempList[i].isDirectory()) {	//判断目录
			  System.out.println("文件夹：" + tempList[i]);
		  }*/
	  }
	  return list;
  }

  /**
   * 传入路径后将直接创建该路径
   *
   * @param path
   *            路径
   */
  public static void judgeIsFileAndFolder(String path)throws Exception {
	  // 实例化File类的对象
	  File f = new File(path);
	  if (f.isDirectory()) {
		  // System.out.println("路径是目录");//如果是文件夹(Midir)
		  judgeIsFileExist(path);
	  } else {
		  // System.out.println("路径不是目录"); //不是文件夹
		  judgeIsFolderExist(path);
	  }

  }

  /**
   * 内容写入文件
   * @param path
   * @param contexts
   * @throws IOException
   */
  public static void StringBufferWrite(String path,String contexts) throws IOException{
	  File file=new File(path);
	  if(!file.exists()){
		  file.createNewFile();
	  }else{
		  file.delete();
		  file.createNewFile();
	  }
	  FileOutputStream out=new FileOutputStream(file,true);
	  StringBuffer sb=new StringBuffer();
	  sb.append(contexts);
	  out.write(sb.toString().getBytes("utf-8"));
	  out.close();
  }


  /**
   * 读取指定文件内容
   * @param filePath
   */
  public static String readTxtFile(String filePath){
	  String context = "";
	  try {
		  String encoding="utf-8";
		  File file=new File(filePath);
		  if(file.isFile() && file.exists()){ //判断文件是否存在
			  InputStreamReader read = new InputStreamReader(
					  new FileInputStream(file),encoding);//考虑到编码格式
			  BufferedReader bufferedReader = new BufferedReader(read);
			  String lineTxt = null;
			  while((lineTxt = bufferedReader.readLine()) != null){
				  //System.out.println(lineTxt);
				  context +=lineTxt+"\n";
			  }
			  read.close();
		  }else{
			  //System.out.println("找不到指定的文件");
		  }
	  } catch (Exception e) {
		  System.out.println("读取文件内容出错");
		  e.printStackTrace();
	  }
	  //System.out.println("FileTool context:" + context);
	  return context;
  }

  /**
   * 删除单个文件
   * @param   sPath    被删除文件的文件名
   * @return 单个文件删除成功返回true，否则返回false
   */
  public static boolean deleteFile(String sPath) {
	  boolean flag = false;
	  File file = new File(sPath);
	  // 路径为文件且不为空则进行删除
	  if (file.isFile() && file.exists()) {
		  file.delete();
		  flag = true;
	  }
	  return flag;
  }

  /**
   * 删除目录（文件夹）以及目录下的文件
   * @param   sPath 被删除目录的文件路径
   * @return  目录删除成功返回true，否则返回false
   */
  public static boolean deleteDirectory(String sPath) {
	  //如果sPath不以文件分隔符结尾，自动添加文件分隔符
	  if (!sPath.endsWith(File.separator)) {
		  sPath = sPath + File.separator;
	  }
	  File dirFile = new File(sPath);
	  //如果dir对应的文件不存在，或者不是一个目录，则退出
	  if (!dirFile.exists() || !dirFile.isDirectory()) {
		  return false;
	  }
	  boolean flag = true;
	  //删除文件夹下的所有文件(包括子目录)
	  File[] files = dirFile.listFiles();
	  for (int i = 0; i < files.length; i++) {
		  //删除子文件
		  if (files[i].isFile()) {
			  flag = deleteFile(files[i].getAbsolutePath());
			  if (!flag) break;
		  } //删除子目录
		  else {
			  flag = deleteDirectory(files[i].getAbsolutePath());
			  if (!flag) break;
		  }
	  }
	  if (!flag) return false;
	  //删除当前目录
	  if (dirFile.delete()) {
		  return true;
	  } else {
		  return false;
	  }
  }




}
